<?php
/**
 * Description of EnqueteDAO
 *
 * @author Magno
 */
class EnqueteDAO {

    private $conexao;
    private $statusDAO;

    public function __construct() {
        $this->conexao = Conexao::getConexao();
        $this->statusDAO = new StatusDAO();
    }

    public function salvar($enquete) {

        try {

            if ($enquete->getEnqueteID() != null && $enquete->getEnqueteID() > 0) {

                $statment = $this->conexao->prepare("UPDATE enquete SET
                        descricao = :descricao,
                        fim = :fim,
                        statusID = :statusID
                        WHERE enqueteID = :enqueteID");
            } else {

                $statment = $this->conexao->prepare("INSERT INTO enquete(enqueteID,descricao,fim,statusID)
                    VALUES (:enqueteID,:descricao,:fim,:statusID);");
            }

            if ($statment->execute($enquete->toBD())) {

                if ($enquete->getEnqueteID() == null || $enquete->getEnqueteID() <= 0)
                    $enquete->setEnqueteID($this->conexao->lastInsertId());
                return $enquete;
            }else {
                $erros = $statment->errorInfo();
                throw new Exception("Erro EnqueteDAO: " . $erros[2]);
            }
        } catch (PDOException $err) {
            throw new Exception("Erro EnqueteDAO:" . $err->getMessage());
        }
    }

    public function excluir($enqueteID) {

        try {

            $statment = $this->conexao->prepare("DELETE FROM enquete WHERE enqueteID = :enqueteID");
            $statment->bindParam(':enqueteID', $enqueteID);

            if (!$statment->execute()) {
                $erros = $statment->errorInfo();
                throw new Exception("Erro EnqueteDAO: " . $erros[2]);
            }
        } catch (PDOException $err) {
            throw new Exception("Erro EnqueteDAO:" . $err->getMessage());
        }
    }

    public function listar($pagina = 0, $inicio = "", $descricao = "", $statusID = -1) {
        try {

            $limite = Util::getPaginacao($pagina);
            $where = $this->getWhere($inicio, $descricao, $statusID);
            $enquetes = array();
            $statment = $this->conexao->query("SELECT * FROM enquete u $where $limite");

            foreach ($statment->fetchAll(PDO::FETCH_SERIALIZE) as $row){
                $enquete = new EnqueteBean($row['enqueteID'], $row['descricao'], Util::dateTimeToString($row['inicio']), Util::dateTimeToString($row['fim']));
                $enquete->setStatus($this->statusDAO->buscarPorID($row['statusID']));
                $enquetes[] =  $enquete;
            }

            return $enquetes;
        } catch (PDOException $err) {
            throw new Exception("Erro EnqueteDAO:" . $err->getMessage());
        }
    }

    public function listarPorOrdem($pagina = 0, $tamanho = 0, $ordem = "enqueteID", $direcao = "DESC") {
        try {

            $limite = Util::getPaginacao($pagina,$tamanho);
            $enquetes = array();
            $statment = $this->conexao->query("SELECT * FROM enquete u ORDER BY u.$ordem $direcao $limite");

            foreach ($statment->fetchAll(PDO::FETCH_SERIALIZE) as $row){
                $enquete = new EnqueteBean($row['enqueteID'], $row['descricao'], Util::dateTimeToString($row['inicio']), Util::dateTimeToString($row['fim']));
                $enquete->setStatus($this->statusDAO->buscarPorID($row['statusID']));
                $enquetes[] = $enquete;
            }

            return $enquetes;
        } catch (PDOException $err) {
            throw new Exception("Erro EnqueteDAO:" . $err->getMessage());
        }
    }

    public function buscarPorID($enqueteID) {
        try {

            $row = $this->conexao->query("SELECT * FROM enquete WHERE enqueteID = $enqueteID ")->fetch(PDO::FETCH_SERIALIZE);

            if (isset ($row['enqueteID']) && $row['enqueteID'] > 0) {
                $enquete = new EnqueteBean($row['enqueteID'], $row['descricao'], Util::dateTimeToString($row['inicio']), Util::dateTimeToString($row['fim']));
                $enquete->setStatus($this->statusDAO->buscarPorID($row['statusID']));
                return $enquete;
            } else {
                return null;
            }
        } catch (PDOException $err) {
            throw new Exception("Erro EnqueteDAO:" . $err->getMessage());
        }
    }

    private function getWhere($inicio = "", $descricao = "",$statusID = -1) {

        $where = " WHERE 1 = 1 ";

        if (isset($inicio) && strlen($inicio) > 0) {
            $where = $where . " AND u.inicio = '$inicio' ";
        }

        if (isset($descricao) && strlen($descricao) > 0) {
            $where = $where . " AND u.descricao like '%$descricao%' ";
        }

        if (isset($statusID) && $statusID > 0) {
            $where = $where . " AND u.statusID = $statusID ";
        }

        return $where;
    }

    public function total($inicio = "", $descricao = "",$statusID = -1) {
        try {

            $where = $this->getWhere($inicio, $descricao, $statusID);
            $total = $this->conexao->query("SELECT COUNT(u.enqueteID) total FROM enquete u $where")->fetch(PDO::FETCH_COLUMN);
            return $total;
        } catch (PDOException $err) {
            throw new Exception("Erro EnqueteDAO:" . $err->getMessage());
        }
    }

}
?>